home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1996 March / macformat-035.iso / Shareware City / Developers / ICAppSourceKit1.2 / ICWindowGlobals.p < prev    next >
Encoding:
Text File  |  1995-11-07  |  3.0 KB  |  131 lines  |  [TEXT/CWIE]

  1. unit ICWindowGlobals;
  2.  
  3. interface
  4.  
  5.     uses
  6.         Files, WIndows;
  7.         
  8.     type
  9.         WindowType = (WT_None, WT_About, WT_Main, WT_Personal, WT_Email, WT_News,{}
  10.             WT_FileTransfer, WT_OtherServices, WT_Font, WT_FileMapping, WT_Helper, WT_Last);
  11.  
  12.     const
  13.         item_max = 10;
  14.         whats_max = 11;
  15.  
  16.     type
  17.         WhatRecord = record
  18.                 key: str31;
  19.                 typ: OSType;
  20.                 flags: longInt;
  21.                 data: ptr;
  22.                 spare_data: Ptr;
  23.                 fss: FSSpec;
  24.                 modified: boolean;
  25.             end;
  26.         WhatRecordPtr = ^WhatRecord;
  27.     var
  28.         windowinfo: array[WindowType] of record
  29.                 window: WindowPtr;
  30.                 items: array[1..item_max] of WhatRecordPtr;
  31.                 window_key_needs_tabs:Boolean;
  32.                 selected_item: integer;
  33.                 id: integer;
  34.                 position: Point;
  35.             end;
  36.         whatinfo: array[1..whats_max] of record
  37.                 typ: OSType;
  38.                 open: ProcPtr;
  39.                 key: ProcPtr;
  40.                 click: ProcPtr;
  41.                 activate: ProcPtr;
  42.                 idle: ProcPtr;
  43.                 flush: ProcPtr;
  44.                 close: ProcPtr;        (* must be able to call close after successful *or* failed open *)
  45.                 cursor: ProcPtr;
  46.                 cursorid: integer;
  47.             end;
  48.  
  49.     const
  50.         wf_locked = 31;
  51.         wf_locked_mask = $80000000;
  52.  
  53.     function GetSelectedItem (wt: WindowType): integer;
  54.     function GetWindowType (wp: WindowPtr): WindowType;
  55.  
  56.     procedure ProcessAttributes (wt: WindowType; item: integer; attr: longint);
  57.     function IsLocked (wt: WindowType; item: integer): boolean;
  58.     procedure LockedAlert (wt: WindowType; item: integer);
  59.  
  60.     procedure InitICWindowGlobals;
  61.  
  62. implementation
  63.  
  64.     uses
  65.         ICTypes,Dialogs, ICMiscSubs,
  66.  
  67.         ICDocument {X};
  68.  
  69.     function GetSelectedItem (wt: WindowType): integer;
  70.         var
  71.             selected_item: integer;
  72.     begin
  73.         selected_item := windowinfo[wt].selected_item;
  74.         if (selected_item > 0) & (windowinfo[wt].items[selected_item] <> nil) & (windowinfo[wt].items[selected_item]^.typ = 'TEXT') then begin
  75.             GetSelectedItem := selected_item;
  76.         end else begin
  77.             GetSelectedItem := -1;
  78.         end; (* if *)
  79.     end; (* GetSelectedItem *)
  80.  
  81.     function GetWindowType (wp: WindowPtr): WindowType;
  82.         var
  83.             i: WindowType;
  84.     begin
  85.         GetWindowType := WT_None;
  86.         if wp <> nil then begin
  87.             for i := WT_None to WT_Last do begin
  88.                 if windowinfo[i].window = wp then begin
  89.                     GetWindowType := i;
  90.                     leave;
  91.                 end;
  92.             end;
  93.         end;
  94.     end;
  95.  
  96.     procedure ProcessAttributes (wt: WindowType; item: integer; attr: longint);
  97.     begin
  98.         if (attr <> ICattr_no_change) & TPbtst(attr, ICattr_locked_bit) then begin
  99.             bset(windowinfo[wt].items[item]^.flags, wf_locked);
  100.         end; (* if *)
  101.     end; (* ProcessAttributes *)
  102.  
  103.     function IsLocked (wt: WindowType; item: integer): boolean;
  104.     begin
  105.         IsLocked := TPbtst(windowinfo[wt].items[item]^.flags, wf_locked) | IsDocLocked;
  106.     end; (* IsLocked *)
  107.  
  108.     var
  109.         last_alert_wt: WindowType;
  110.         last_alert_item: integer;
  111.  
  112.     procedure LockedAlert (wt: WindowType; item: integer);
  113.         var
  114.             junk: integer;
  115.     begin
  116.         if (wt <> last_alert_wt) or (item <> last_alert_item) then begin
  117.             ResetAlertStage;
  118.             last_alert_wt := wt;
  119.             last_alert_item := item;
  120.         end; (* if *)
  121.         InitCursor;
  122.         junk := StopAlert(143, nil);
  123.     end; (* LockedAlert *)
  124.  
  125.     procedure InitICWindowGlobals;
  126.     begin
  127.         last_alert_wt := WT_None;
  128.         last_alert_item := -1;
  129.     end; (* InitICWindowGlobals *)
  130.  
  131. end.